/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ModeloNegocio;

import Herramientas.Herramientas;
import ModeloNegocio.src.*;
import java.util.ArrayList;
import java.util.Collection;

/**
 *
 * @author ivanpianetti
 */
public class DatosModeloNegocio {

    public static ArrayList<Alumno> listaAlumnos;
    public static Alumno alumnoPiane;
    public static Alumno alumnoMatias;
    public static Alumno alumnoNahuel;
    public static Alumno alumnoAle;
    ///////////
    public static Carrera carreraSistemas;
    ///////////
    public static Asignatura asigQuimica;
    private static Asignatura asigAnalisisI;
    private final Asignatura asigFisicaI;
    private final Asignatura asigAlgoritmo;
    private final Asignatura asigArquitectura;
    ///////////
    public static Comision comisionQuimica_TurnoA1;
    public static Comision comisionAnalisisI_TurnoB2;
    public static Comision comisionFisicaI_TurnoA1;
    public static Comision comisionAlgoritmo_TurnoA1;
    public static Comision comisionArquitectura_TurnoB1;
    ///////////
    private static Cursa cursaAlumnoMatias_Q;
    private static Cursa cursaAlumnoMatias_AI;
    private static Cursa cursaAlumnoMatias_FI;
    private static Cursa cursaAlumnoMatias_Alg;
    private static Cursa cursaAlumnoMatias_Arquitectura;
    ///////////
    private static Clase clase_Q_Dia1;
    private static Clase clase_Q_Dia2;
    private static Clase clase_Q_Dia3;
    private static Clase clase_Q_Dia4;
    private static Clase clase_Q_Dia5;
    private static Clase clase_Q_Dia6;
    ///////////
    private static Clase clase_AI_Dia1;
    private static Clase clase_AI_Dia2;
    private static Clase clase_AI_Dia3;
    ///////////
    private static Clase clase_FI_Dia1;
    private static Clase clase_FI_Dia2;
    private static Clase clase_FI_Dia3;
    ///////////
    private static Asistencia asistAlumnMatias_Q_Dia1;
    private static Asistencia asistAlumnoMatias_Q_Dia2;
    private static Asistencia asistAlumnoMatias_Q_Dia3;
    private static Asistencia asistAlumnoMatias_Q_Dia4;
    private static Asistencia asistAlumnoMatias_Q_Dia5;
    private static Asistencia asistAlumnoMatias_Q_Dia6;
    ///////////
    private static Asistencia asistAlumnoMatias_AI_Dia1;
    private static Asistencia asistAlumnoMatias_AI_Dia2;
    private static Asistencia asistAlumnoMatias_AI_Dia3;
    ///////////
    private static Asistencia asistAlumnoMatias_FI_Dia1;
    private static Asistencia asistAlumnoMatias_FI_Dia2;
    private static Asistencia asistAlumnoMatias_FI_Dia3;

    static {
        DatosModeloNegocio datos = new DatosModeloNegocio();
    }

    public DatosModeloNegocio() {

//        ####################### 
//        Alumno
//        #######################
        alumnoMatias = new Alumno("14090961", "Matías", "Borges", 34141412, "MatiasB@gmail.com");
        alumnoPiane = new Alumno("14091400", "Ivan", "Pianetti", 33912953, "PianettiI@gmail.com");
        alumnoNahuel = new Alumno("14090976", "Nahuel", "Grasso", 32331445, "NahuelG@gmail.com");
        alumnoAle = new Alumno("14071441", "Alejandro", "Dus", 32344134, "AleD@gmail.com");
        listaAlumnos = new ArrayList<Alumno>();
        listaAlumnos.add(alumnoMatias);
        listaAlumnos.add(alumnoAle);
        listaAlumnos.add(alumnoNahuel);
        listaAlumnos.add(alumnoPiane);

//        ####################### 
//        Carrera
//        #######################

        carreraSistemas = new Carrera("K", "Lic. Sistemas");

//        ####################### 
//        Asignatura
//        #######################
        asigQuimica = new Asignatura("Química", 60, carreraSistemas);
        asigAnalisisI = new Asignatura("Análisis I", 55, carreraSistemas);
        asigFisicaI = new Asignatura("Física I", 70, carreraSistemas);
        asigAlgoritmo = new Asignatura("Algoritmo", 75, carreraSistemas);
        asigArquitectura = new Asignatura("Arq de Comp", 60, carreraSistemas);

//        ####################### 
//        Comision
//        #######################
        comisionQuimica_TurnoA1 = new Comision(asigQuimica, "2013", "A1", 20, 15);
        comisionAnalisisI_TurnoB2 = new Comision(asigAnalisisI, "2013", "B2", 15, 12);
        comisionFisicaI_TurnoA1 = new Comision(asigFisicaI, "2013", "A1", 18, 14);
        comisionAlgoritmo_TurnoA1 = new Comision(asigAlgoritmo, "2012", "A1", 20, 14);
        comisionArquitectura_TurnoB1 = new Comision(asigArquitectura, "2012", "B1", 18, 15);

//        ####################### 
//        Asistencia
//        ####################### 
        asistAlumnMatias_Q_Dia1 = new Asistencia(alumnoMatias, true);
        asistAlumnoMatias_Q_Dia2 = new Asistencia(alumnoMatias, false);
        asistAlumnoMatias_Q_Dia3 = new Asistencia(alumnoMatias, true);
        asistAlumnoMatias_Q_Dia4 = new Asistencia(alumnoMatias, true);
        asistAlumnoMatias_Q_Dia5 = new Asistencia(alumnoMatias, false);
        asistAlumnoMatias_Q_Dia5.setJustificada(true);
        asistAlumnoMatias_Q_Dia6 = new Asistencia(alumnoMatias, false);

        asistAlumnoMatias_AI_Dia1 = new Asistencia(alumnoMatias, true);
        asistAlumnoMatias_AI_Dia2 = new Asistencia(alumnoMatias, true);
        asistAlumnoMatias_AI_Dia3 = new Asistencia(alumnoMatias, false);

        asistAlumnoMatias_FI_Dia1 = new Asistencia(alumnoMatias, false);
        asistAlumnoMatias_FI_Dia2 = new Asistencia(alumnoMatias, true);
        asistAlumnoMatias_FI_Dia3 = new Asistencia(alumnoMatias, true);
//        ####################### 
//        Cursa
//        ####################### 
        cursaAlumnoMatias_Q = new Cursa(alumnoMatias, comisionQuimica_TurnoA1, "cursando", Herramientas.formarFecha("1/8/2013"));
        cursaAlumnoMatias_AI = new Cursa(alumnoMatias, comisionAnalisisI_TurnoB2, "cursando", Herramientas.formarFecha("1/8/2013"));
        cursaAlumnoMatias_FI = new Cursa(alumnoMatias, comisionFisicaI_TurnoA1, "cursando", Herramientas.formarFecha("1/8/2013"));
        cursaAlumnoMatias_Alg = new Cursa(alumnoMatias, comisionAlgoritmo_TurnoA1, "regular", Herramientas.formarFecha("23/11/2012"));
        cursaAlumnoMatias_Arquitectura = new Cursa(alumnoMatias, comisionArquitectura_TurnoB1, "aprobado", Herramientas.formarFecha("23/11/2012"));
        cursaAlumnoMatias_Arquitectura.setNota(8.0);

        Collection<Cursa> cursadasA1 = new ArrayList<Cursa>();
        cursadasA1.add(cursaAlumnoMatias_Q);
        cursadasA1.add(cursaAlumnoMatias_AI);
        cursadasA1.add(cursaAlumnoMatias_FI);
        cursadasA1.add(cursaAlumnoMatias_Alg);
        cursadasA1.add(cursaAlumnoMatias_Arquitectura);
        alumnoMatias.setCursa(cursadasA1);
//        ####################### 
//        Clase
//        ####################### 

        //<editor-fold defaultstate="collapsed" desc="Clases de Quimica, Análisis I y Física">
        //QUIMICA
        clase_Q_Dia1 = new Clase(comisionQuimica_TurnoA1, 1.0, Herramientas.formarFecha("11/10/2013"));
        Collection<Asistencia> unaClase = new ArrayList<Asistencia>();
        unaClase.add(asistAlumnMatias_Q_Dia1);
        clase_Q_Dia1.setAsistencia(unaClase);

        clase_Q_Dia2 = new Clase(comisionQuimica_TurnoA1, 5.0, Herramientas.formarFecha("09/10/2013"));
        unaClase = new ArrayList<Asistencia>();
        unaClase.add(asistAlumnoMatias_Q_Dia2);
        clase_Q_Dia2.setAsistencia(unaClase);

        clase_Q_Dia3 = new Clase(comisionQuimica_TurnoA1, 1.5, Herramientas.formarFecha("07/10/2013"));
        unaClase = new ArrayList<Asistencia>();
        unaClase.add(asistAlumnoMatias_Q_Dia3);
        clase_Q_Dia3.setAsistencia(unaClase);

        clase_Q_Dia4 = new Clase(comisionQuimica_TurnoA1, 1.0, Herramientas.formarFecha("04/10/2013"));
        unaClase = new ArrayList<Asistencia>();
        unaClase.add(asistAlumnoMatias_Q_Dia4);
        clase_Q_Dia4.setAsistencia(unaClase);

        clase_Q_Dia5 = new Clase(comisionQuimica_TurnoA1, 5.0, Herramientas.formarFecha("02/10/2013"));
        unaClase = new ArrayList<Asistencia>();
        unaClase.add(asistAlumnoMatias_Q_Dia5);
        clase_Q_Dia5.setAsistencia(unaClase);

        clase_Q_Dia6 = new Clase(comisionQuimica_TurnoA1, 1.5, Herramientas.formarFecha("30/09/2013"));
        unaClase = new ArrayList<Asistencia>();
        unaClase.add(asistAlumnoMatias_Q_Dia6);
        clase_Q_Dia6.setAsistencia(unaClase);



        Collection<Clase> ClasesQ = new ArrayList<Clase>();
        ClasesQ.add(clase_Q_Dia1);
        ClasesQ.add(clase_Q_Dia2);
        ClasesQ.add(clase_Q_Dia3);
        ClasesQ.add(clase_Q_Dia4);
        ClasesQ.add(clase_Q_Dia5);
        ClasesQ.add(clase_Q_Dia6);
        comisionQuimica_TurnoA1.setClase(ClasesQ);


        //ANALISIS I

        clase_AI_Dia1 = new Clase(comisionAnalisisI_TurnoB2, 3.0, Herramientas.formarFecha("11/10/2013"));
        unaClase = new ArrayList<Asistencia>();
        unaClase.add(asistAlumnoMatias_AI_Dia1);
        clase_AI_Dia1.setAsistencia(unaClase);

        clase_AI_Dia2 = new Clase(comisionAnalisisI_TurnoB2, 1.30, Herramientas.formarFecha("09/10/2013"));
        unaClase = new ArrayList<Asistencia>();
        unaClase.add(asistAlumnoMatias_AI_Dia2);
        clase_AI_Dia2.setAsistencia(unaClase);

        clase_AI_Dia3 = new Clase(comisionAnalisisI_TurnoB2, 2.15, Herramientas.formarFecha("07/10/2013"));
        unaClase = new ArrayList<Asistencia>();
        unaClase.add(asistAlumnoMatias_AI_Dia3);
        clase_AI_Dia3.setAsistencia(unaClase);

        Collection<Clase> ClasesAI = new ArrayList<Clase>();
        ClasesAI.add(clase_AI_Dia1);
        ClasesAI.add(clase_AI_Dia2);
        ClasesAI.add(clase_AI_Dia3);
        comisionAnalisisI_TurnoB2.setClase(ClasesAI);

        //FISICA I

        clase_FI_Dia1 = new Clase(comisionFisicaI_TurnoA1, 1.0, Herramientas.formarFecha("11/10/2013"));
        unaClase = new ArrayList<Asistencia>();
        unaClase.add(asistAlumnoMatias_FI_Dia1);
        clase_FI_Dia1.setAsistencia(unaClase);

        clase_FI_Dia2 = new Clase(comisionFisicaI_TurnoA1, 3.0, Herramientas.formarFecha("09/10/2013"));
        unaClase = new ArrayList<Asistencia>();
        unaClase.add(asistAlumnoMatias_FI_Dia2);
        clase_FI_Dia2.setAsistencia(unaClase);

        clase_FI_Dia3 = new Clase(comisionFisicaI_TurnoA1, 1.0, Herramientas.formarFecha("07/10/2013"));
        unaClase = new ArrayList<Asistencia>();
        unaClase.add(asistAlumnoMatias_FI_Dia3);
        clase_FI_Dia3.setAsistencia(unaClase);

        Collection<Clase> ClasesF = new ArrayList<Clase>();
        ClasesF.add(clase_FI_Dia1);
        ClasesF.add(clase_FI_Dia2);
        ClasesF.add(clase_FI_Dia3);
        comisionFisicaI_TurnoA1.setClase(ClasesAI);
        //</editor-fold>

//        ####################### 
//        Exámenes Finales
//        ####################### 
        ExamenFinal finalAlumnoMatias_Q_Mesa1 = new ExamenFinal(alumnoMatias, Herramientas.formarFecha("23/2/2013"), asigAlgoritmo, 0.0, false);
        ExamenFinal finalAlumnoMatias_Q_Mesa2 = new ExamenFinal(alumnoMatias, Herramientas.formarFecha("27/3/2013"), asigAlgoritmo, 2.0, true);

        ArrayList<ExamenFinal> examenesFinales = new ArrayList<ExamenFinal>();
        examenesFinales.add(finalAlumnoMatias_Q_Mesa1);
        examenesFinales.add(finalAlumnoMatias_Q_Mesa2);
        alumnoMatias.setExamenFinal(examenesFinales);





    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
    }

    public static ArrayList<Comision> getComisionesQueCursaMatias() {
        ArrayList<Comision> comisionEnCurso = new ArrayList<Comision>();
        for (Cursa c : alumnoMatias.getCursa()) {
            if (c.getEstado().equalsIgnoreCase("cursando")) {
                comisionEnCurso.add(c.getComision());
            }
        }
        return comisionEnCurso;
    }

    public static Comision getComisionQuimicaDeMatias() {
        for (Cursa c : alumnoMatias.getCursa()) {
            if (c.getEstado().equalsIgnoreCase("cursando")) {
                if (c.getComision().getAsignatura().getNombre().equalsIgnoreCase("Química")) {
                    return c.getComision();
                }
            }
        }
        return null;
    }

    public static Integer getNumeroTotalInasistenciasPorComisionMatias(Comision comision) {
        int faltas = 0;
        for (Clase cl : comision.getClase()) {
            for (Asistencia a : cl.getAsistencia()) {
                if (a.isAusente()) {
                    faltas++;
                }
            }
        }
        return faltas;
    }

    public static Double getHorasTotalInasistenciasPorComisionMatias(Comision comision) {
        Double horas = 0.0;
        for (Clase cl : comision.getClase()) {
            for (Asistencia a : cl.getAsistencia()) {
                if (a.isAusente()) {
                    horas = horas + cl.getCantidadDeHoras();
                }
            }
        }
        return horas;
    }

    public static Double getPorcentajeAsistenciaPromocionPorComisionMatias(Comision comision) {
        Double porc = 0.00;

        Double faltas = getHorasTotalInasistenciasPorComisionMatias(comision);
        Integer maxFaltas = comision.getInasistenciasMaxParaPromocionar();
        porc = new Double(faltas * 100 / maxFaltas);
        porc = Math.rint(porc * 100) / 100;
        return porc;
    }

    public static Double getPorcentajeAsistenciaRegularPorComisionMatias(Comision comision) {
        Double porc = 0.00;

        Double faltas = getHorasTotalInasistenciasPorComisionMatias(comision);
        int maxFaltas = comision.getInasistenciasMaxParaRegularizar();
        porc = new Double(faltas * 100 / maxFaltas);

        porc = Math.rint(porc * 100) / 100;

        return porc;
    }

    public static ArrayList<ExamenFinal> getExamenesFinalesDeMatias() {
        ArrayList<ExamenFinal> examenes = new ArrayList<ExamenFinal>(alumnoMatias.getExamenFinal());
        return examenes;
    }

    public static ArrayList<Cursa> getAsignaturasCursadasDeMatias() {
        ArrayList<Cursa> yaCursadas = new ArrayList<Cursa>();
        for (Cursa c : alumnoMatias.getCursa()) {
            if (!c.getEstado().equalsIgnoreCase("cursando")) {
                yaCursadas.add(c);
            }
        }
        return yaCursadas;
    }
}
